package com.crm.system.service.user;

import com.alibaba.fastjson.JSONObject;
import com.crm.common.model.DhPageInfo;
import com.crm.model.entity.sys.UserAccount;
import com.crm.model.qo.sys.UserAccountQO;
import com.crm.model.vo.systemManager.UserAccountImportVO;
import com.crm.model.vo.user.UserAccountAddQO;
import com.crm.model.vo.user.UserAccountManagerVO;
import com.crm.model.vo.user.UserAccountVO;
import com.github.pagehelper.PageInfo;

import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author luojie
 * @date 2020/11/13 9:32
 */
public interface UserAccountService {

    /**
     * 通过账号名查询账号信息
     * @param userName
     * @return
     */
    UserAccount selectUserAccountByUserName(String userName);

    /**
     * 通过账号id查询账号信息
     * @param accountId
     * @return
     */
    UserAccount selectUserAccountByAccountId(String accountId);

    /**
     * 通过部门id查询账号列表
     * @param deptId
     * @return
     */
    List<HashMap> selectUserAccountByDeptId(String deptId);

    /**
     * 根据公司id查询账号列表
     * @param companyId
     * @return
     */
    List<UserAccount> selectUserAccountByCompanyId(String companyId);

    /**
     * 根据公司id查询账号列表
     * @param companyId
     * @return
     */
    List<UserAccount>getAccountByCompanyIdExcludeLoginPerson(String companyId);

    /***
     * @Description:按照公司id获取分页的账号列表
     * @Param: 公司id
     * @Author: luojie
     * @Date: 2021/8/18 14:23
     */
    List<UserAccount> getAccountListPageByCompanyId(Integer pageIndex,Integer pageSize,String companyId,String userName);

    /**
     * 根据公司id获取在职且未禁用账号列表
     * @Author renshaorong
     * @Date 2021/7/13
     */
    List<UserAccountManagerVO> getAbleAccountListByCompanyId(String companyId);

    /**
     *合同管理-合作开发人员
     * @return
     */
    List<UserAccountVO> getAllCoDeveloper();


    /**
     * 获取权限组名单添加人员账号列表
     * @return
     */
    List<Map<String, Object>> selectUserAccountList(String permissionGroupId);

    /**
     * 获取所有账号
     * @Author pym
     * @Date  2021/3/17 10:21
     * @param 
     * @return {@link {java.util.List<com.crm.model.entity.sys.UserAccount>}}
     */
    List<UserAccount> getAllAccountList();


    /**
     * @Description: 获取分公司下的账号列表
     * @Param: []
     * @Return: java.util.List<com.crm.model.entity.sys.UserAccount>
     * @Author: lixq-f
     * @Date: 2021/6/28
    **/
    List<UserAccount> getAccountListByCompanyId();

    /**
     * 修改用户密码
     * @Author renshaorong
     * @Date 2021/3/30
     * @param userPassword 新密码
     * @param oldPassword 旧密码
     * @return 是否修改成功
     */
    Short updateUserPassword(String userPassword, String oldPassword);

    /**
     * 验证原密码是否正确
     * @Author renshaorong
     * @Date 2021/3/30
     * @param userPassword 当前密码
     * @return
     */
    Boolean verifyPassword(String userPassword);

    /**
     * 获取账号列表
     * @Author renshaorong
     * @Date 2021/4/7
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param userAccountQO 查询实体
     * @param sortName 排序列名称
     * @param sortOrder 排序规则(asc/desc)
     * @return
     */
    DhPageInfo<UserAccountManagerVO> selectUserAccountPage(Integer pageIndex, Integer pageSize, UserAccountQO userAccountQO, String sortName, String sortOrder);

    /**
     * 初始化密码为初始值
     * @Author renshaorong
     * @Date 2021/4/8
     * @param accountId user_account表主键
     * @return
     */
    boolean initialPassword(String accountId);

    /***
     * @Description:添加用户账号
     * @Param: userAccountAddVO 账号以及用户信息参数
     * @Author: luojie
     * @Date: 2021/5/17 15:09
     */
    JSONObject addUserAccountAndUserInfo(UserAccountAddQO userAccountAddQO);

    /**
     * 禁用
     * @Author renshaorong
     * @Date 2021/5/25 
     * @param accountId
     * @return
     */
    boolean disableByAccountId(String accountId);

    /**
     * 修改分机号
     * @Author pym
     * @Date  2021/5/26 15:46
     * @param accountId 账号ID
     * @param extensionNumber 分机号
     * @return {@link {boolean}}
     */
    String updateExtensionNumber(String accountId, String extensionNumber);

    /**
     * 导入账号
     * @param list
     * @return
     */
    JSONObject importUserAccount(List<UserAccountImportVO> list,String companyId,Integer type)throws ParseException;


    boolean enableByAccountId(String accountId);

    /**
     * 发送邮件告诉用户密码
     * @param companyId
     */
    void sendUserPasswordToMail(String companyId);

    /**
     * 把离职用户密码发送给公司总经理
     * @param companyId
     */
    void sendLeaveUserPasswordToMail(String companyId,String sendMail);

    /**
     * 阶段性停用
     * @Author renshaorong
     * @Date 2021/6/24 
     * @param accountId
     * @param deacType
     * @param deacToTime
     * @return
     */
    boolean saveDeacByAccountId(String accountId, String deacType, String deacToTime);

    /**
     * 离职
     * @Author renshaorong
     * @Date 2021/7/2 
     * @param accountId
     * @return
     */
    boolean resignByAccountId(String accountId);

    /**
     * 测试redis的key是否覆盖
     * @return
     */
    Boolean getList();


    /**
     * @Description: 获取所有在职且未禁用账号列表
     * @Param: []
     * @Return: java.util.List<com.crm.model.entity.sys.UserAccount>
     * @Author: lixq-f
     * @Date: 2021/7/27
     **/
    List<UserAccountManagerVO> getAllUsedAccountList();

    /***
     * @Description:查询客服部人员列表
     * @Param:
     * @Author: luojie
     * @Date: 2021/11/9 14:16
     */
    List<JSONObject> selectReviewerList();

    /**
     * 查询用户
     * @return
     */
    List<UserAccountManagerVO> selectUserList(String companyId);
}
